package tree.daoyu;

/**
 * 给你一个大小为 m x n 的二进制矩阵 grid 。
 *
 * 岛屿 是由一些相邻的 1 (代表土地) 构成的组合，这里的「相邻」要求两个 1 必须在 水平或者竖直的四个方向上 相邻。你可以假设 grid 的四个边缘都被 0（代表水）包围着。
 *
 * 岛屿的面积是岛上值为 1 的单元格的数目。
 *
 * 计算并返回 grid 中最大的岛屿面积。如果没有岛屿，则返回面积为 0 。
 */
public class leetCode695_maxAreaOfIsland {

    public int maxAreaOfIsland(int[][] grid) {
        if(grid == null || grid.length == 0)return 0;
        int n = grid.length;
        int m = grid[0].length;
        int max = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if(grid[i][j] == 1) {
                    max = Math.max(build(grid,i,j),max);
                }
            }
        }
        return max;
    }

    public int build(int[][] grid,int i,int j){
        if(i < 0 || j < 0 || grid[i][j] != 1 || i > grid.length-1 || j > grid[0].length - 1 ){
            return 0;
        }
        grid[i][j] = 2;
        return 1
                + build(grid,i+1,j)
                + build(grid,i-1,j)
                + build(grid,i,j+1)
                + build(grid,i,j-1);
    }
}
